// 1.  定义一个Promise构造函数，传入`excutor`执行器函数
// 2. 在构造函数内定义2个属性
//    1. `this.PromiseState` 保存promise状态
//    2. `this.PromiseResult`保存promise结果值
// 3. 定义resolve、reject函数
//    1. 在resolve函数内修改`this.PromiseState` 为`fulfilled`，`this.PromiseResult`为value
//    2. 在reject函数内修改`this.PromiseState`为 `rejected`,`this.PromiseResult` 为 reason
// 4. 调用`excutor`函数并传入resolve、reject函数
// 5. try捕获执行`excutor`函数时抛出错误
//    1. catch 内调用reject函数并传入err参数
function Promise(excutor){
    this.promiseState = 'pending';
    this.promiseResult = undefined;
    let resolve = (value)=>{
        this.promiseState = 'fulfilled';
        this.promiseResult = value;
    }
    let reject = (reason)=>{
        this.promiseState = 'rejected';
        this.promiseResult = reason;
    }
    try{
        excutor(resolve,reject)
    }catch(err){
        reject(err)
    }
}

Promise.prototype.then = function(resFn,rejFn){

    if(this.promiseState === 'fulfilled'){
        resFn(this.promiseResult)
    }

    if(this.promiseState === 'rejected'){
        rejFn(this.promiseResult)
    }

}




// 对象 定义属性
// 对象方法 ：原型方法
// 方法和属性继承
// function Person(name,age){
//     this.name = name;
//     this.age = age;
// }

// // 添加原型方法
// Person.prototype.then = function(){
//     console.log(this.name + '跑了');
// }

// function Student(name,age,score,classNum){
//     Person.call(this,name,age);
//     this.score = score;
//     this.classNum = classNum;
// }

// Student.prototype = new Person();
// Student.prototype.constructor = Student;


// let p1 = new Person('老王',18)

// p1.then();

// console.log(p1);

// let s1 = new Student('嘉奇',18,100,'0315');

// s1.then();

// console.log(s1);